import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Genera el Escenario del Juego.
 * 
 * @author Daniel Isaac Marmolejo Pereira
 * @version Final
 */
public class Mundo extends World
{

    /**
     * Contructor del mundo. Genera la ventana, inicia los contadores, crea el jugador y el auxiliar auxl y llama a la funcion prepar().
     * 
     */
     private Cube cube;
     private Piso piso;
     private Letrero Let;
     private Contador vidas;
     private Contador nivel;
     private Contador puntos;
     private Timer tiempo;
     private auxl auxl;
     private Letrero Let2;
     private boolean band=true;
     private int ni=0;
     private int vel= 6;
     private BotonJugar bj = new BotonJugar();
     private BotonCreditos bc = new BotonCreditos();
     private BotonInstrucciones bi = new BotonInstrucciones();
     private BotonMenu bm = new BotonMenu();
    public Mundo()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(850, 400, 1); 
        this.iniciarContadores();
        auxl = new auxl();
        Menu();
    }
    /**
     * Muestra los Elementos del menu.
     */
    public void Menu()
    {
        addObject (bj, 320, 150);
        addObject (bc, 570, 150);
        addObject (bi, 420, 260);
    }
    /**
     *Checa en que que objeto se da click.
     */
    public void mouse()
    {
        if(Greenfoot.mouseClicked(bj))
        {
            prepare();
            ni=1;
        }
        else if(Greenfoot.mouseClicked(bc))
        {
            super.removeObjects(getObjects(null));
            creditos();
        }
        else if(Greenfoot.mouseClicked(bm))
        {
            super.removeObjects(getObjects(null));
            Menu();
        }
        else if(Greenfoot.mouseClicked(bi))
        {
            super.removeObjects(getObjects(null));
            intrucciones();
        }

    }
    
    /**
    * llama al metodo Niveles()
    */
    public void act()
    {
        this.Niveles();
        mouse();
    }

    /**
     * Prepara y crea los elementos para empezar el juego.
     * 
     */

    public void prepare()
    {
        band=false;
        super.removeObjects(getObjects(null));
        tiempo =  new Timer(0);

        addObject(auxl, 214, 214);
        auxl.setLocation(222, 209);
        piso = new Piso();
        addObject(piso, 246, 328);
        piso.setLocation(239, 321);

        cube= cube= new Cube();
        addObject(cube, 240, 200);
        addObject(vidas, 30, 20);
        addObject(nivel, 400, 20);
        addObject(tiempo, 800, 20);
        addObject(puntos, 450, 350);

        Fin fin = new Fin();
        addObject(fin, 15, 278);

        auxl.setLocation(239, 210);

        auxl.setLocation(221, 208);
        auxl.setLocation(232, 212);
    }

/**
 * Crea un Objeto Letrero para mostrar un mensage
 * @param letrero
 */
public void muestreLetrero(String letrero)
{
    Let = new Letrero(letrero);
    addObject(Let,300,300);
}
/**
 * Inicializa los contadores vidas y nivel
 */
public void iniciarContadores()
{
        vidas =  new Contador("Vidas: ",5);
        nivel =  new Contador("Nivel: ",1);
        puntos= new Contador("Puntos: ",0);
}
/**
 * Crea un Objeto Letrero para mostrar un mensage
 * @param letrero
 */
public void letrero(String letrero)
{
    Let = new Letrero(letrero);
    addObject(Let,420,200);
}
/**
 * Checa que nivel está en curso, crea y muestra los elementos del nivel en curso.
 */
public void Niveles()
{
if(ni==1)
{
   this.nivel1(); 
}
else if(ni==2)
{
    this.nivel2();
}
else if(ni==3)
{
    this.nivel3();
}

}

/**
 * Suma a uno el nivel
 */
public void SigNive()
{
ni++;
if (ni==4)
{
Gana();
}
else
{
nivel.incrementa();
letrero("GANASTE SIGUIENTE NIVEL");
Greenfoot.delay(50);
this.prepare();
}
}
/**
 * Muentra el mensage cuando pasas todos los niveles.
 */
public void Gana()
{
letrero("=D FELICIDADES GANASTE");
Greenfoot.delay(50);
super.removeObjects(getObjects(null));
iniciarContadores();
Menu();
}
/**
 * Muestra el mensage cuando pierdes.
 */
public void Perdiste()
{
letrero(" X( HAZ PERDIDO");
Greenfoot.delay(50);
super.removeObjects(getObjects(null));
iniciarContadores();
Menu();
}
/**
 * Muestra los Elementos de los creditos
 */
public void creditos()
{
    super.removeObjects(getObjects(null));
    addObject(new Letrero("Universidad Autonoma De San Luis Potosi"),425,25);
    addObject(new Letrero("Área de Computación e Informática"),425,100);
    addObject(new Letrero("Programación orientada a objetos"),425,150);
    addObject(new Letrero("PROF.: M.C. Froylán Eloy Hernández Castro "),425,200);
    addObject(new Letrero("DESARROLLADOR"),425,250);
    addObject(new Letrero("Daniel Isaac Marmolejo Pereira"),425,300);
    addObject (bm, 700, 370);
}
/**
 * Muestra los Elementos de las Instrucciones.
 */
public void intrucciones()
{
    super.removeObjects(getObjects(null));
    addObject(new Letrero("INTRUCCIONES"),425,25);
    addObject(new Letrero("Espacio - > Saltar  Flecha Izq.-> Mueve Izq."),425,100);
    addObject(new Letrero("Fecha Der. -> Mueve Der."),425,140);
    addObject(new Letrero("Objetivo:"),425,200);
    addObject(new Letrero("Esquivar los enemigos  que vayan "),425,250);
     addObject(new Letrero("apareciendo y llegar a la meta."),425,300);
    addObject (bm, 700, 370);
}
/**
 * Muestra los enemigos del 3 nivel
 */
public void nivel1()
{
vel=4;
    cube.vel(vel);
    
    if(tiempo.dameTiempo()==2 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==25 && band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==27 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }

    if(tiempo.dameTiempo()==45 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    if(tiempo.dameTiempo()==50 && !band)
    {
        addObject(new Hoyo(vel),820,320);
         band=!band;
    }
    if(tiempo.dameTiempo()==55 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    
    
        if(tiempo.dameTiempo()==75 && !band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    if(tiempo.dameTiempo()==77 && band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
        if(tiempo.dameTiempo()==95 && !band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
            if(tiempo.dameTiempo()==115 && band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    if(tiempo.dameTiempo()==117 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    
        if(tiempo.dameTiempo()==130 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    if(tiempo.dameTiempo()==133 && !band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
    if(tiempo.dameTiempo()==145 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
            if(tiempo.dameTiempo()==150 && !band)
    {
        addObject(new Hoyo(vel),820,320);
         band=!band;
    }
    if(tiempo.dameTiempo()==155 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    
    if(tiempo.dameTiempo()==170 && !band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
    if(tiempo.dameTiempo()==190 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    if(tiempo.dameTiempo()==193 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    
     if(tiempo.dameTiempo()==210 && band)
    {
        addObject(new Escalon(vel),800,297);
         band=!band;
    }
    if(tiempo.dameTiempo()==213 && !band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
        if(tiempo.dameTiempo()==230 && band)
    {
        addObject(new Picon(vel),800,300);
         band=!band;
    }
    
            if(tiempo.dameTiempo()==280 && !band)
    {
        addObject(new Meta(vel),800,250);
         band=!band;
    }
}
/**
 * Muestra los enemigos del 2 nivel
 */
public void nivel2()
{
vel=5;
    cube.vel(vel);
    if(tiempo.dameTiempo()==2 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    
        if(tiempo.dameTiempo()==10 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==20 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==40 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
            if(tiempo.dameTiempo()==44 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==49 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    
    
    if(tiempo.dameTiempo()==65 && !band)
    {
        addObject(new Escalon(vel),800,297);
        band=!band;
    }
    if(tiempo.dameTiempo()==69 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==74 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
    if(tiempo.dameTiempo()==78 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==82 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
    if(tiempo.dameTiempo()==86 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==90 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,297);
        band=!band;
    }
    if(tiempo.dameTiempo()==130 && band)
    {
        addObject(new Rocub(vel),800,280);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==150 && !band)
    {
        addObject(new Escalon(vel),800,297);
        band=!band;
    }
        if(tiempo.dameTiempo()==154 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
     if(tiempo.dameTiempo()==159 && !band)
    {
        addObject(new Escalon(vel),800,297);
        band=!band;
    }
    if(tiempo.dameTiempo()==163 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==167 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
        if(tiempo.dameTiempo()==171 && band)
    {
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
        if(tiempo.dameTiempo()==175 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,200);
       band=!band;
    }
        if(tiempo.dameTiempo()==179 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==183 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
    if(tiempo.dameTiempo()==187 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==191 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,200);
        band=!band;
    }
     if(tiempo.dameTiempo()==195 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==199 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
         if(tiempo.dameTiempo()==203 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==207 && !band)
    {
        addObject(new Hoyo(vel),800,320);
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==240 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==244 && !band)
    {
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
    if(tiempo.dameTiempo()==249 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    
        if(tiempo.dameTiempo()==290 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
        
     if(tiempo.dameTiempo()==320 && band)
    {
        addObject(new Meta(vel),800,250);
        band=!band; 
    }
}
/**
 * Muestra los enemigos del 3 nivel
 */
public void nivel3()
{
    vel=6;
    cube.vel(vel);
    if(tiempo.dameTiempo()==2 && !band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==15 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==19 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==24 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    
    if(tiempo.dameTiempo()==35 && !band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
     if(tiempo.dameTiempo()==39 && band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
     if(tiempo.dameTiempo()==44 && !band)
    {
        addObject(new Escalon(vel),800,250);
        band=!band;
    }
    if(tiempo.dameTiempo()==45 && band)
    {
        addObject(new Escalon(vel),820,250);
        band=!band;
    }
     if(tiempo.dameTiempo()==49 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==60 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    
    if(tiempo.dameTiempo()==80 && !band)
    {
        addObject(new Rocub(vel),800,280);
        band=!band;
    }

        if(tiempo.dameTiempo()==100 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    if(tiempo.dameTiempo()==104 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==109 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    
    if(tiempo.dameTiempo()==125 && !band)
    {
        addObject(new Escalon(vel),800,300);
      band=!band;
    }
    if(tiempo.dameTiempo()==129 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
    if(tiempo.dameTiempo()==133 && !band)
    {
        addObject(new Picon(vel),800,255);
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
        if(tiempo.dameTiempo()==137 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==141 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==146 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    if(tiempo.dameTiempo()==150 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==155 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    if(tiempo.dameTiempo()==160 && !band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==164 && band)
    {
        addObject(new Picon(vel),800,255);
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
        if(tiempo.dameTiempo()==170 && !band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==174 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
    if(tiempo.dameTiempo()==178 && !band)
    {
        addObject(new Picon(vel),800,255);
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
        if(tiempo.dameTiempo()==183 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==187 && !band)
    {
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
    if(tiempo.dameTiempo()==192 && band)
    {
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
    
        
    if(tiempo.dameTiempo()==210 && !band)
    {
        addObject(new Rocub(vel),800,280);
       band=!band;
    }
    
        if(tiempo.dameTiempo()==250 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    
        if(tiempo.dameTiempo()==270 && !band)
    {
        addObject(new Rocub(vel),800,280);
       band=!band;
    }
    
     if(tiempo.dameTiempo()==310 && band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    
        if(tiempo.dameTiempo()==320 && !band)
    {
        addObject(new Picon(vel),800,300);
       band=!band;
    }
    
        if(tiempo.dameTiempo()==330 && band)
    {
        addObject(new Picon(vel),800,300);
       band=!band;
    }
    
    if(tiempo.dameTiempo()==340 && !band)
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    if(tiempo.dameTiempo()==344 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
    if(tiempo.dameTiempo()==348 && !band)
    {
        addObject(new Picon(vel),800,210);
        addObject(new Escalon(vel),800,255);
        addObject(new Escalon(vel),800,300);
        band=!band;
    }
        if(tiempo.dameTiempo()==352 && band)
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==356 && !band)
    {
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==361 && band)//5
    {
        addObject(new Escalon(vel),800,300);
      band=!band;
    }
    if(tiempo.dameTiempo()==365 && !band)//4
    {
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
    if(tiempo.dameTiempo()==370 && band)//5
    {
        addObject(new Escalon(vel),800,300);
       band=!band;
    }
    if(tiempo.dameTiempo()==374 && !band)//4
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
      band=!band;
    }
    if(tiempo.dameTiempo()==378 && band)//4
    {
        addObject(new Picon(vel),800,210);
        addObject(new Escalon(vel),800,255);
        addObject(new Escalon(vel),800,300);
      band=!band;
    }
        if(tiempo.dameTiempo()==384 && !band)//6
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
        band=!band;
    }
        if(tiempo.dameTiempo()==388 && band)//4
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
      band=!band;
    }
    if(tiempo.dameTiempo()==392 && !band)//4
    {
        addObject(new Picon(vel),800,255);
        addObject(new Escalon(vel),800,300);
      band=!band;
    }
        if(tiempo.dameTiempo()==397 && band)//5
    {
        addObject(new Escalon(vel),800,250);
        addObject(new Hoyo(vel),820,320);
       band=!band;
    }
        if(tiempo.dameTiempo()==401 && !band)//4
    {
        addObject(new Hoyo(vel),820,320);
      band=!band;
    }
    if(tiempo.dameTiempo()==406 && band)//5
    {
        addObject(new Escalon(vel),800,300);
     band=!band;
    }
    
    if(tiempo.dameTiempo()==410 && !band)
    {
        addObject(new Escalon(vel),800,300);
     band=!band;
    }
    
    if(tiempo.dameTiempo()==430 && band)
    {
        addObject(new Rocub(vel),800,280);
      band=!band;
    }
    
        if(tiempo.dameTiempo()==500 && !band)
    {
        addObject(new Escalon(vel),800,300);
   band=!band;
    }
    
    if(tiempo.dameTiempo()==520 && band)
    {
        addObject(new Picon(vel),800,300);
       band=!band;
    }
            if(tiempo.dameTiempo()==530 && !band)
    {
        addObject(new Picon(vel),800,300);
      band=!band;
    }
            if(tiempo.dameTiempo()==540 && band)
    {
        addObject(new Picon(vel),800,300);
       band=!band;
    }
            if(tiempo.dameTiempo()==550 && !band)
    {
        addObject(new Picon(vel),800,300);
      band=!band;
    }
            if(tiempo.dameTiempo()==560 && band)
    {
        addObject(new Picon(vel),800,300);
      band=!band;
    }
            if(tiempo.dameTiempo()==570 && !band)
    {
        addObject(new Picon(vel),800,300);
      band=!band;
    }
            if(tiempo.dameTiempo()==580 && band)
    {
        addObject(new Picon(vel),800,300);
        band=!band;
    }
            if(tiempo.dameTiempo()==590 && !band)
    {
        addObject(new Picon(vel),800,300);
       band=!band;
    }
    
         if(tiempo.dameTiempo()==610 && band)
    {
        addObject(new Meta(vel),800,250);
       band=!band;
    }
}
/**
 * Metodo para dar el Objeto Cube
 * @return cube
 */
public Cube jugador()
{
    return cube;
}
/**
 * Metodo para dar el Objeto Piso
 * @return piso
 */
public Piso DamePiso()
{
    return piso;
}
/**
 * Metodo para dar el Objeto Contador
 * @return vidas
 */
public Contador DameVidas()
{
return vidas;
}
/**
 * Metodo para dar el Objeto Contador
 * @return puntos
 */
public Contador DamePuntos()
{
return puntos;
}
/**
 * Metodo para dar el Objeto au
 * @return cube
 */
public auxl DameAuxl()
{
    return auxl;
}
}


